Purpose

Here we perform a first pass look at the data. We will plot some high-level statistics and see where the various perturbations fall with respect to these readouts. We expect to see that for all readouts, the non-targeting experiments display a central distribution, with most perturbations falling nearby. Perturbations that impact the statistics are expected to appear as outliers.

Initialization

Libraries

library(magrittr)
library(tidyverse)
library(cowplot)
library(plotly)
library(ggbeeswarm)
library(Matrix)
library(matrixStats)
library(SingleCellExperiment)

Parameters

set.seed(20210818)
FILE_SCE_TX="data/sce/kd6_essential.annot.txs.Rds"

Data

Loading

sce <- readRDS(FILE_SCE_TX)

Preprocessing

Among our statistics, we will compute the percentage of UMIs corresponding to specific isoform classes, including IPA, proximal, and distal, as well as UMIs from mitochondrial genes.

idx_mt <- rowRanges(sce) %>% 
    unlist %>% as_tibble %>%
    mutate(is_mt=seqnames == "chrM")  %>% 
    select(transcript_id, is_mt) %>%
    deframe() %>%
    `[`(rownames(sce))

df_cells <- colData(sce) %>% as_tibble %>%
    mutate(umis_total=colSums(counts(sce)),
           pct_ipa=colSums(counts(sce[rowData(sce)$is_ipa,]))/umis_total,
           pct_proximal=colSums(counts(sce[rowData(sce)$is_proximal,]))/umis_total,
           pct_distal=colSums(counts(sce[rowData(sce)$is_distal,]))/umis_total,
           pct_novel=colSums(counts(sce[rowData(sce)$is_novel,]))/umis_total,
           pct_mt=colSums(counts(sce[idx_mt,]))/umis_total)

Analysis

UMIs per Cell

df_cells %>%
    ggplot(aes(x=UMI_count, y=umis_total)) +
    geom_density2d_filled() +
    geom_abline(linetype='dashed', color="white") +
    scale_x_log10(expand=c(0,0)) + scale_y_log10(expand=c(0,0)) +
    scale_fill_viridis_d(option="F") +
    theme_bw() +
    labs(x="UMI counts per cell [published]", 
         y="UMI counts per cell [scUTRquant]") +
    guides(fill='none')

Cells per Sample

The scUTRquant QC showed the elbow plots were not well defined for Lanes 21 and 48, which led to very high numbers of barcodes being called as cells. We hope to see that these samples do not have a high number of annotation cells.

df_cells %>%
    mutate(sample_id=fct_infreq(sample_id.x)) %>%
    ggplot(aes(y=sample_id)) +
    geom_bar(fill='lightgrey', color='black', size=0.2) +
    scale_x_continuous(expand=c(0,0,0.05,0)) +
    theme_bw() +
    labs(x="Cells", y="Sample")

The low cell count for those two runs (21, 48) is consistent with an effective filtering process in the original data processing, since we retain only the cells that were annotated there. Seeing Lane 4 also with low cell counts was not expected. Reviewing the scUTRquant QC, the shape of the UMI vs barcode plot is normal, though is shifted, indicating that the quality of preparation was consistent with the majority of samples, only that perhaps fewer cells were loaded in the Chromium lane.

Cells per target

df_cells %>%
    mutate(target_gene=fct_infreq(target_gene)) %>%
    dplyr::count(target_gene, name="n_cells") %>%
    filter(target_gene != 'non-targeting') %>%
    ggplot(aes(x=target_gene, y=n_cells)) +
    geom_bar(stat='identity', fill='grey', width=1) +
    scale_y_log10(expand=c(0,0,0.05,0)) +
    theme_bw() +
    theme(axis.text.x=element_blank(), axis.ticks.x=element_blank()) + 
    labs(x="Target Gene", y="Cells")

There are several perturbations that have extremely low cell counts. Generally, we have used a rule of thumb of at least 200 cells per condition as a lower bound for performing transcriptome-wide differential transcript usage testing (with scUTRboot).

Instead, for the majority of perturbations, we may only be able to characterize high-level changes in transcriptome characteristics rather than at gene-level resolution.

Target Analysis

We will explore whether any perturbations have effects on basic transcriptome characteristics. These will also be compared against each other.

df_targets <- df_cells %>%
    group_by(target_gene, target_gene_id, sgID_AB) %>%
    summarize(mean_umis_total=mean(umis_total),
              pct_ipa=weighted.mean(pct_ipa, umis_total),
              pct_proximal=weighted.mean(pct_proximal, umis_total),
              pct_distal=weighted.mean(pct_distal, umis_total),
              pct_mt=weighted.mean(pct_mt, umis_total), .groups='drop')

Mitochondrial

df_targets %>%
    mutate(sgID_AB=fct_reorder(sgID_AB, -pct_mt)) %>%
    ggplot(aes(x=sgID_AB, y=pct_mt, fill=target_gene == "non-targeting")) +
    geom_bar(stat='identity') +
    scale_y_continuous(expand=c(0,0,0.05,0)) +
    scale_fill_manual(values=c('grey', 'red')) +
    theme_bw() +
    theme(axis.text.x=element_blank(), axis.ticks.x=element_blank()) + 
    labs(x="Target Gene", y="Percent UMIs Mitochondrial", fill="Control")

g <- df_targets %>%
    mutate(is_nt=target_gene == "non-targeting") %>%
    ggplot(aes(x="Perturbations", y=pct_mt)) +
    geom_violin(fill='lightgrey', size=0.2, draw_quantiles=c(0.25, 0.50, 0.75)) +
    geom_quasirandom(aes(color=is_nt, size=is_nt, text=target_gene), 
                     pch=16) +
    scale_color_manual(values=c("black", "red")) +
    scale_size_manual(values=c(0.1,1), guide='none') +
    scale_y_continuous(labels=scales::percent_format(accuracy=1)) +
    theme_bw() +
    labs(x=NULL, y="Percent UMIs from chrM",
         color="Control")
## Warning: Ignoring unknown aesthetics: text
ggplotly(g, tooltip=c("text", "y")) %>%
    style(hoverinfo = "skip", traces = 1)
df_targets %>%
    select(target_gene, pct_mt, mean_umis_total, sgID_AB) %>%
    slice_max(pct_mt, n=20)
## # A tibble: 20 × 4
##    target_gene pct_mt mean_umis_total sgID_AB                                   
##    <chr>        <dbl>           <dbl> <chr>                                     
##  1 POLR2K       0.176           6259. POLR2K_-_101162904.23-P1P2|POLR2K_-_10116…
##  2 POLR2G       0.173           7980. POLR2G_-_62529086.23-P1P2|POLR2G_-_625290…
##  3 TAF10        0.172           7808. TAF10_-_6633436.23-P1P2|TAF10_+_6633406.2…
##  4 TAF12        0.171           7796. TAF12_+_28969568.23-P1P2|TAF12_+_28969521…
##  5 TAF5         0.170           7884. TAF5_-_105127776.23-P1P2|TAF5_+_105127794…
##  6 RBBP5        0.170          13453. RBBP5_-_205091086.23-P1P2|RBBP5_-_2050910…
##  7 GPN3         0.169           8130. GPN3_-_110906004.23-P1P2|GPN3_+_110906029…
##  8 TAF1         0.165           7683. TAF1_-_70586444.23-P1P2|TAF1_+_70586687.2…
##  9 MED9         0.165           5430. MED9_-_17380350.23-P1P2|MED9_-_17380394.2…
## 10 SUPT6H       0.165           5454. SUPT6H_+_26989285.23-P1P2|SUPT6H_+_269892…
## 11 RPAP2        0.164           8649. RPAP2_-_92764613.23-P1P2|RPAP2_+_92764606…
## 12 WDR5         0.164          10564. WDR5_+_137001233.23-P1P2|WDR5_+_137001236…
## 13 MED30        0.163           5613. MED30_+_118533216.23-P1P2|MED30_-_1185332…
## 14 POLR2H       0.163           7520. POLR2H_+_184081227.23-P1P2|POLR2H_-_18408…
## 15 RPAP1        0.163           9235. RPAP1_+_41836411.23-P1P2|RPAP1_+_41836408…
## 16 MVD          0.162          13380. MVD_+_88729520.23-P1P2|MVD_-_88729483.23-…
## 17 GPN2         0.161          10375. GPN2_-_27216692.23-P1P2|GPN2_+_27216709.2…
## 18 GPN1         0.161           8828. GPN1_-_27852137.23-P1P2|GPN1_-_27852111.2…
## 19 MRPL43       0.160          12799. MRPL43_+_102747000.23-P1P2|MRPL43_-_10274…
## 20 PABPC1       0.160           7823. PABPC1_+_101734089.23-P1P2|PABPC1_-_10173…
df_targets %>%
    select(target_gene, pct_mt, mean_umis_total, sgID_AB) %>%
    slice_min(pct_mt, n=20)
## # A tibble: 20 × 4
##    target_gene pct_mt mean_umis_total sgID_AB                                   
##    <chr>        <dbl>           <dbl> <chr>                                     
##  1 LRPPRC      0.0259          11039. LRPPRC_+_44223082.23-P1P2|LRPPRC_-_442230…
##  2 MTPAP       0.0262           9928. MTPAP_-_30638029.23-P1P2|MTPAP_-_30638037…
##  3 POLRMT      0.0307          10634. POLRMT_+_633505.23-P1P2|POLRMT_+_633481.2…
##  4 SSBP1       0.0429          10516. SSBP1_+_141438412.23-P1P2|SSBP1_+_1414384…
##  5 PNPT1       0.0454          11283. PNPT1_-_55920888.23-P1P2|PNPT1_-_55920900…
##  6 TEFM        0.0541          11202. TEFM_+_29233191.23-P1P2|TEFM_+_29233099.2…
##  7 HSPA9       0.0623           8020. HSPA9_-_137911079.23-P1P2|HSPA9_-_1379110…
##  8 SUPV3L1     0.0663          10835. SUPV3L1_+_70940042.23-P1P2|SUPV3L1_+_7094…
##  9 TOMM22      0.0673          10385. TOMM22_+_39078005.23-P1P2|TOMM22_-_390781…
## 10 RPL27       0.0675          13218. RPL27_-_41150504.23-P1P2|RPL27_+_41150471…
## 11 RPL17       0.0687          12455. RPL17_-_47018832.23-P1P2|RPL17_-_47018796…
## 12 TFAM        0.0694          10899. TFAM_+_60145205.23-P1P2|TFAM_-_60145223.2…
## 13 RPL23A      0.0707          12806. RPL23A_-_27047048.23-P1P2|RPL23A_+_270473…
## 14 RPL7A       0.0717          14127. RPL7A_-_136215123.23-P1P2|RPL7A_+_1362150…
## 15 AFG3L2      0.0736          12122. AFG3L2_-_12377212.23-P1P2|AFG3L2_-_123772…
## 16 RPL6        0.0743          12548. RPL6_-_112847347.23-P1P2|RPL6_-_112847189…
## 17 MRPS14      0.0745          10630. MRPS14_-_174992444.23-P1P2|MRPS14_+_17499…
## 18 DNAJA3      0.0750          10703. DNAJA3_+_4475898.23-P1P2|DNAJA3_-_4475855…
## 19 AQR         0.0752          11415. AQR_+_35261872.23-P1P2|AQR_-_35261877.23-…
## 20 RPL31       0.0758          12719. RPL31_-_101618787.23-P1P2|RPL31_-_1016187…

IPA

df_targets %>%
    mutate(sgID_AB=fct_reorder(sgID_AB, -pct_ipa)) %>%
    ggplot(aes(x=sgID_AB, y=pct_ipa, fill=target_gene == "non-targeting")) +
    geom_bar(stat='identity') +
    scale_y_continuous(expand=c(0,0,0.05,0)) +
    scale_fill_manual(values=c('grey', 'red')) +
    theme_bw() +
    theme(axis.text.x=element_blank(), axis.ticks.x=element_blank()) + 
    labs(x="Target Gene", y="Percent UMIs IPA", fill="Control")

g <- df_targets %>%
    mutate(is_nt=target_gene == "non-targeting") %>%
    ggplot(aes(x="Perturbations", y=pct_ipa)) +
    geom_violin(fill='lightgrey', size=0.2, draw_quantiles=c(0.25, 0.50, 0.75)) +
    geom_quasirandom(aes(color=is_nt, size=is_nt, text=target_gene), 
                     pch=16) +
    scale_color_manual(values=c("black", "red")) +
    scale_size_manual(values=c(0.1,1), guide='none') +
    scale_y_continuous(labels=scales::percent_format(accuracy=1)) +
    theme_bw() +
    labs(x=NULL, y="Percent UMIs from IPA isoforms",
         color="Control")
## Warning: Ignoring unknown aesthetics: text
ggplotly(g, tooltip=c("text", "y")) %>%
    style(hoverinfo = "skip", traces = 1)
df_targets %>%
    select(target_gene, pct_ipa, mean_umis_total, sgID_AB) %>%
    slice_max(pct_ipa, n=20)
## # A tibble: 20 × 4
##    target_gene pct_ipa mean_umis_total sgID_AB                                  
##    <chr>         <dbl>           <dbl> <chr>                                    
##  1 HSPA9         0.176           8020. HSPA9_-_137911079.23-P1P2|HSPA9_-_137911…
##  2 MTPAP         0.173           9928. MTPAP_-_30638029.23-P1P2|MTPAP_-_3063803…
##  3 LRPPRC        0.171          11039. LRPPRC_+_44223082.23-P1P2|LRPPRC_-_44223…
##  4 POLRMT        0.171          10634. POLRMT_+_633505.23-P1P2|POLRMT_+_633481.…
##  5 PHB           0.170           8162. PHB_+_47492183.23-P1P2|PHB_+_47492231.23…
##  6 SSBP1         0.170          10516. SSBP1_+_141438412.23-P1P2|SSBP1_+_141438…
##  7 PHB2          0.169           8389. PHB2_+_7079788.23-P1P2|PHB2_-_7079800.23…
##  8 AFG3L2        0.169          12122. AFG3L2_-_12377212.23-P1P2|AFG3L2_-_12377…
##  9 TIMM23B       0.168           9256. TIMM23B_-_51371488.23-P1P2|TIMM23B_-_513…
## 10 PNPT1         0.168          11283. PNPT1_-_55920888.23-P1P2|PNPT1_-_5592090…
## 11 DNAJC19       0.168           9265. DNAJC19_+_180707414.23-P1P2|DNAJC19_+_18…
## 12 AQR           0.167          11415. AQR_+_35261872.23-P1P2|AQR_-_35261877.23…
## 13 AARS          0.167           9698. AARS_+_70323362.23-P1P2|AARS_-_70323332.…
## 14 DNAJA3        0.166          10703. DNAJA3_+_4475898.23-P1P2|DNAJA3_-_447585…
## 15 TOMM22        0.166          10385. TOMM22_+_39078005.23-P1P2|TOMM22_-_39078…
## 16 PRELID3B      0.166          10301. SLMO2_-_57617833.23-P1P2|SLMO2_-_5761781…
## 17 HGS           0.166          10234. HGS_-_79651112.23-P1P2|HGS_-_79651070.23…
## 18 PAM16         0.165          10537. PAM16_+_4401248.23-P1P2|PAM16_-_4401236.…
## 19 EIF2S1        0.165           8939. EIF2S1_-_67827085.23-P1P2|EIF2S1_-_67827…
## 20 LSM6          0.165          12259. LSM6_-_147096941.23-P1P2|LSM6_-_14709691…
df_targets %>%
    select(target_gene, pct_ipa, mean_umis_total, sgID_AB) %>%
    slice_min(pct_ipa, n=20)
## # A tibble: 20 × 4
##    target_gene pct_ipa mean_umis_total sgID_AB                                  
##    <chr>         <dbl>           <dbl> <chr>                                    
##  1 TAF10         0.139           7808. TAF10_-_6633436.23-P1P2|TAF10_+_6633406.…
##  2 TAF12         0.140           7796. TAF12_+_28969568.23-P1P2|TAF12_+_2896952…
##  3 POLR2K        0.141           6259. POLR2K_-_101162904.23-P1P2|POLR2K_-_1011…
##  4 EP400         0.141          11265. EP400_+_132434542.23-P1P2|EP400_-_132434…
##  5 TAF6          0.142           9595. TAF6_-_99716931.23-P1P2|TAF6_+_99716935.…
##  6 WDR5          0.142          10564. WDR5_+_137001233.23-P1P2|WDR5_+_13700123…
##  7 TAF1          0.143           7683. TAF1_-_70586444.23-P1P2|TAF1_+_70586687.…
##  8 TAF5          0.143           7884. TAF5_-_105127776.23-P1P2|TAF5_+_10512779…
##  9 CSTF3         0.143          10053. CSTF3_+_33183038.23-P1P2|CSTF3_-_3318280…
## 10 TAF2          0.144           8020. TAF2_-_120844853.23-P1P2|TAF2_-_12084504…
## 11 TAF8          0.144           8666. TAF8_-_42018330.23-P1P2|TAF8_+_42018316.…
## 12 CPSF1         0.144           9551. CPSF1_+_145634685.23-P1P2|CPSF1_-_145634…
## 13 NCBP2         0.145           8990. NCBP2_-_196669400.23-P1P2|NCBP2_-_196669…
## 14 RPAP1         0.145           9235. RPAP1_+_41836411.23-P1P2|RPAP1_+_4183640…
## 15 FIP1L1        0.145           8742. FIP1L1_+_54243867.23-P1P2|FIP1L1_-_54244…
## 16 EXOC7         0.145           9882. EXOC7_-_74099399.23-P1P2|EXOC7_+_7409979…
## 17 NELFA         0.145          10381. NELFA_+_2010657.23-P1P2|NELFA_+_2010470.…
## 18 PPRC1         0.145          10227. PPRC1_-_103892809.23-P1P2|PPRC1_-_103892…
## 19 NCBP1         0.145           8216. NCBP1_+_100396123.23-P1P2|NCBP1_+_100396…
## 20 GPN3          0.145           8130. GPN3_-_110906004.23-P1P2|GPN3_+_11090602…

Proximal

df_targets %>%
    mutate(sgID_AB=fct_reorder(sgID_AB, -pct_proximal)) %>%
    ggplot(aes(x=sgID_AB, y=pct_proximal, fill=target_gene == "non-targeting")) +
    geom_bar(stat='identity') +
    scale_y_continuous(expand=c(0,0,0.05,0)) +
    scale_fill_manual(values=c('grey', 'red')) +
    theme_bw() +
    theme(axis.text.x=element_blank(), axis.ticks.x=element_blank()) + 
    labs(x="Target Gene", y="Percent UMIs Proximal Transcript", fill="Control")

g <- df_targets %>%
    mutate(is_nt=target_gene == "non-targeting") %>%
    ggplot(aes(x="Perturbations", y=pct_proximal)) +
    geom_violin(fill='lightgrey', size=0.2, draw_quantiles=c(0.25, 0.50, 0.75)) +
    geom_quasirandom(aes(color=is_nt, size=is_nt, text=target_gene), 
                     pch=16) +
    scale_color_manual(values=c("black", "red")) +
    scale_size_manual(values=c(0.1,1), guide='none') +
    scale_y_continuous(labels=scales::percent_format(accuracy=1)) +
    theme_bw() +
    labs(x=NULL, y="Percent UMIs from proximal isoforms",
         color="Control")
## Warning: Ignoring unknown aesthetics: text
ggplotly(g, tooltip=c("text", "y")) %>%
    style(hoverinfo = "skip", traces = 1)
df_targets %>%
    select(target_gene, pct_proximal, mean_umis_total, sgID_AB) %>%
    slice_max(pct_proximal, n=20)
## # A tibble: 20 × 4
##    target_gene pct_proximal mean_umis_total sgID_AB                             
##    <chr>              <dbl>           <dbl> <chr>                               
##  1 POLR2K             0.292           6259. POLR2K_-_101162904.23-P1P2|POLR2K_-…
##  2 EP400              0.289          11265. EP400_+_132434542.23-P1P2|EP400_-_1…
##  3 TAF12              0.287           7796. TAF12_+_28969568.23-P1P2|TAF12_+_28…
##  4 TAF10              0.286           7808. TAF10_-_6633436.23-P1P2|TAF10_+_663…
##  5 TAF5               0.285           7884. TAF5_-_105127776.23-P1P2|TAF5_+_105…
##  6 POLR2G             0.285           7980. POLR2G_-_62529086.23-P1P2|POLR2G_-_…
##  7 GPN3               0.282           8130. GPN3_-_110906004.23-P1P2|GPN3_+_110…
##  8 WDR5               0.281          10564. WDR5_+_137001233.23-P1P2|WDR5_+_137…
##  9 MED9               0.280           5430. MED9_-_17380350.23-P1P2|MED9_-_1738…
## 10 TAF1               0.280           7683. TAF1_-_70586444.23-P1P2|TAF1_+_7058…
## 11 RBBP5              0.279          13453. RBBP5_-_205091086.23-P1P2|RBBP5_-_2…
## 12 SUPT6H             0.279           5454. SUPT6H_+_26989285.23-P1P2|SUPT6H_+_…
## 13 MED30              0.279           5613. MED30_+_118533216.23-P1P2|MED30_-_1…
## 14 PABPC1             0.278           7823. PABPC1_+_101734089.23-P1P2|PABPC1_-…
## 15 RPAP2              0.278           8649. RPAP2_-_92764613.23-P1P2|RPAP2_+_92…
## 16 MED18              0.277           8405. MED18_-_28655598.23-P1P2|MED18_-_28…
## 17 POLR2H             0.277           7520. POLR2H_+_184081227.23-P1P2|POLR2H_-…
## 18 RPAP1              0.277           9235. RPAP1_+_41836411.23-P1P2|RPAP1_+_41…
## 19 TRRAP              0.277          11006. TRRAP_-_98476562.23-P1P2|TRRAP_-_98…
## 20 GPN2               0.276          10375. GPN2_-_27216692.23-P1P2|GPN2_+_2721…
df_targets %>%
    select(target_gene, pct_proximal, mean_umis_total, sgID_AB) %>%
    slice_min(pct_proximal, n=20)
## # A tibble: 20 × 4
##    target_gene pct_proximal mean_umis_total sgID_AB                             
##    <chr>              <dbl>           <dbl> <chr>                               
##  1 MTPAP              0.155           9928. MTPAP_-_30638029.23-P1P2|MTPAP_-_30…
##  2 LRPPRC             0.156          11039. LRPPRC_+_44223082.23-P1P2|LRPPRC_-_…
##  3 POLRMT             0.158          10634. POLRMT_+_633505.23-P1P2|POLRMT_+_63…
##  4 SSBP1              0.170          10516. SSBP1_+_141438412.23-P1P2|SSBP1_+_1…
##  5 PNPT1              0.173          11283. PNPT1_-_55920888.23-P1P2|PNPT1_-_55…
##  6 HSPA9              0.179           8020. HSPA9_-_137911079.23-P1P2|HSPA9_-_1…
##  7 TEFM               0.185          11202. TEFM_+_29233191.23-P1P2|TEFM_+_2923…
##  8 TOMM22             0.191          10385. TOMM22_+_39078005.23-P1P2|TOMM22_-_…
##  9 AQR                0.193          11415. AQR_+_35261872.23-P1P2|AQR_-_352618…
## 10 TFAM               0.194          10899. TFAM_+_60145205.23-P1P2|TFAM_-_6014…
## 11 SUPV3L1            0.194          10835. SUPV3L1_+_70940042.23-P1P2|SUPV3L1_…
## 12 DNAJA3             0.196          10703. DNAJA3_+_4475898.23-P1P2|DNAJA3_-_4…
## 13 AFG3L2             0.196          12122. AFG3L2_-_12377212.23-P1P2|AFG3L2_-_…
## 14 PHB                0.197           8162. PHB_+_47492183.23-P1P2|PHB_+_474922…
## 15 RPL27              0.197          13218. RPL27_-_41150504.23-P1P2|RPL27_+_41…
## 16 MRPS14             0.199          10630. MRPS14_-_174992444.23-P1P2|MRPS14_+…
## 17 RPL17              0.199          12455. RPL17_-_47018832.23-P1P2|RPL17_-_47…
## 18 RPL23A             0.200          12806. RPL23A_-_27047048.23-P1P2|RPL23A_+_…
## 19 RPL7A              0.202          14127. RPL7A_-_136215123.23-P1P2|RPL7A_+_1…
## 20 REXO2              0.203          10952. REXO2_-_114310257.23-P1P2|REXO2_+_1…

Distal

df_targets %>%
    mutate(sgID_AB=fct_reorder(sgID_AB, -pct_distal)) %>%
    ggplot(aes(x=sgID_AB, y=pct_distal, fill=target_gene == "non-targeting")) +
    geom_bar(stat='identity') +
    scale_y_continuous(expand=c(0,0,0.05,0)) +
    scale_fill_manual(values=c('grey', 'red')) +
    theme_bw() +
    theme(axis.text.x=element_blank(), axis.ticks.x=element_blank()) + 
    labs(x="Target Gene", y="Percent UMIs Distal Transcripts", fill="Control")

g <- df_targets %>%
    mutate(is_nt=target_gene == "non-targeting") %>%
    ggplot(aes(x="Perturbations", y=pct_distal)) +
    geom_violin(fill='lightgrey', size=0.2, draw_quantiles=c(0.25, 0.50, 0.75)) +
    geom_quasirandom(aes(color=is_nt, size=is_nt, text=target_gene), 
                     pch=16) +
    scale_color_manual(values=c("black", "red")) +
    scale_size_manual(values=c(0.1,1), guide='none') +
    scale_y_continuous(labels=scales::percent_format(accuracy=1)) +
    theme_bw() +
    labs(x=NULL, y="Percent UMIs from distal isoforms",
         color="Control")
## Warning: Ignoring unknown aesthetics: text
ggplotly(g, tooltip=c("text", "y")) %>%
    style(hoverinfo = "skip", traces = 1)
df_targets %>%
    select(target_gene, pct_distal, mean_umis_total, sgID_AB) %>%
    slice_max(pct_distal, n=20)
## # A tibble: 20 × 4
##    target_gene pct_distal mean_umis_total sgID_AB                               
##    <chr>            <dbl>           <dbl> <chr>                                 
##  1 TAF10            0.558           7808. TAF10_-_6633436.23-P1P2|TAF10_+_66334…
##  2 TAF12            0.554           7796. TAF12_+_28969568.23-P1P2|TAF12_+_2896…
##  3 EP400            0.551          11265. EP400_+_132434542.23-P1P2|EP400_-_132…
##  4 TAF5             0.551           7884. TAF5_-_105127776.23-P1P2|TAF5_+_10512…
##  5 TAF1             0.550           7683. TAF1_-_70586444.23-P1P2|TAF1_+_705866…
##  6 POLR2K           0.550           6259. POLR2K_-_101162904.23-P1P2|POLR2K_-_1…
##  7 TAF2             0.548           8020. TAF2_-_120844853.23-P1P2|TAF2_-_12084…
##  8 POLR2G           0.547           7980. POLR2G_-_62529086.23-P1P2|POLR2G_-_62…
##  9 TAF8             0.546           8666. TAF8_-_42018330.23-P1P2|TAF8_+_420183…
## 10 FIP1L1           0.546           8742. FIP1L1_+_54243867.23-P1P2|FIP1L1_-_54…
## 11 GPN3             0.544           8130. GPN3_-_110906004.23-P1P2|GPN3_+_11090…
## 12 RBBP5            0.544          13453. RBBP5_-_205091086.23-P1P2|RBBP5_-_205…
## 13 TAF7             0.543           8899. TAF7_+_140700244.23-P1P2|TAF7_+_14070…
## 14 SRRT             0.543           8303. SRRT_+_100472814.23-P1P2|SRRT_+_10047…
## 15 MVD              0.543          13380. MVD_+_88729520.23-P1P2|MVD_-_88729483…
## 16 RPAP2            0.542           8649. RPAP2_-_92764613.23-P1P2|RPAP2_+_9276…
## 17 SUPT5H           0.541           5532. SUPT5H_-_39936298.23-P1P2|SUPT5H_-_39…
## 18 CASP8AP2         0.541          13603. CASP8AP2_-_90539614.23-P1P2|CASP8AP2_…
## 19 RPAP1            0.541           9235. RPAP1_+_41836411.23-P1P2|RPAP1_+_4183…
## 20 POLR2H           0.541           7520. POLR2H_+_184081227.23-P1P2|POLR2H_-_1…
df_targets %>%
    select(target_gene, pct_distal, mean_umis_total, sgID_AB) %>%
    slice_min(pct_distal, n=20)
## # A tibble: 20 × 4
##    target_gene pct_distal mean_umis_total sgID_AB                               
##    <chr>            <dbl>           <dbl> <chr>                                 
##  1 MTPAP            0.459           9928. MTPAP_-_30638029.23-P1P2|MTPAP_-_3063…
##  2 POLRMT           0.464          10634. POLRMT_+_633505.23-P1P2|POLRMT_+_6334…
##  3 LRPPRC           0.465          11039. LRPPRC_+_44223082.23-P1P2|LRPPRC_-_44…
##  4 SSBP1            0.470          10516. SSBP1_+_141438412.23-P1P2|SSBP1_+_141…
##  5 HSPA9            0.472           8020. HSPA9_-_137911079.23-P1P2|HSPA9_-_137…
##  6 PNPT1            0.479          11283. PNPT1_-_55920888.23-P1P2|PNPT1_-_5592…
##  7 PHB              0.482           8162. PHB_+_47492183.23-P1P2|PHB_+_47492231…
##  8 TEFM             0.482          11202. TEFM_+_29233191.23-P1P2|TEFM_+_292330…
##  9 AQR              0.482          11415. AQR_+_35261872.23-P1P2|AQR_-_35261877…
## 10 RPL27            0.483          13218. RPL27_-_41150504.23-P1P2|RPL27_+_4115…
## 11 TOMM22           0.484          10385. TOMM22_+_39078005.23-P1P2|TOMM22_-_39…
## 12 TFAM             0.484          10899. TFAM_+_60145205.23-P1P2|TFAM_-_601452…
## 13 RPL17            0.484          12455. RPL17_-_47018832.23-P1P2|RPL17_-_4701…
## 14 AFG3L2           0.484          12122. AFG3L2_-_12377212.23-P1P2|AFG3L2_-_12…
## 15 RPL6             0.485          12548. RPL6_-_112847347.23-P1P2|RPL6_-_11284…
## 16 RPL23A           0.485          12806. RPL23A_-_27047048.23-P1P2|RPL23A_+_27…
## 17 PHB2             0.486           8389. PHB2_+_7079788.23-P1P2|PHB2_-_7079800…
## 18 RPL7A            0.487          14127. RPL7A_-_136215123.23-P1P2|RPL7A_+_136…
## 19 RPL19            0.487          12977. RPL19_-_37356608.23-P1P2|RPL19_+_3735…
## 20 FAM50A           0.488          10382. FAM50A_-_153672598.23-P1P2|FAM50A_-_1…

Pair Plots

Proximal vs Distal

g <- df_targets %>%
    mutate(is_nt=target_gene == "non-targeting") %>%
    ggplot(aes(x=pct_proximal, y=pct_distal, color=is_nt, text=target_gene)) +
    geom_point(aes(size=is_nt), 
               pch=16) +
    geom_rug(size=0.1) +
    scale_color_manual(values=c("black", "red")) +
    scale_size_manual(values=c(0.2,0.8)) +
    scale_x_continuous(labels=scales::percent_format(accuracy=1)) +
    scale_y_continuous(labels=scales::percent_format(accuracy=1)) +
    theme_bw() +
    theme(legend.position="none") +
    labs(x="Percent UMIs from proximal isoforms",
         y="Percent UMIs from distal isoforms")

ggplotly(g, tooltip=c("text", "x", "y"))

Naively, we would expect these to compensatory statistics, however, in this first pass we include also single-UTR isoforms, which are labeled as both “proximal” and “distal”. This possibly explains the strong positive correlation.

We observe here three major outliers that

  • NUDT21
  • CPSF6
  • OGFOD1

The first two are major cleavage enhancement factors that co-complex and bind RNA around UGUA motifs found 40-80 nts upstream of the mRNA cleavage site. OGFOD1 has no known regulatory effect on 3’ UTR isoform usage in mammals, though it is a homolog of Tpa1 (Sac. cer.), which stands for “Termination and Polyadenylation 1”.

This could represent novel function.

IPA vs Proximal

g <- df_targets %>%
    mutate(is_nt=target_gene == "non-targeting") %>%
    ggplot(aes(x=pct_ipa, y=pct_proximal, color=is_nt, text=target_gene)) +
    geom_point(aes(size=is_nt), 
               pch=16) +
    geom_rug(size=0.1) +
    scale_color_manual(values=c("black", "red")) +
    scale_size_manual(values=c(0.2,0.8)) +
    scale_x_continuous(labels=scales::percent_format(accuracy=1)) +
    scale_y_continuous(labels=scales::percent_format(accuracy=1)) +
    theme_bw() +
    theme(legend.position="none") +
    labs(x="Percent UMIs from IPA isoforms",
         y="Percent UMIs from proximal isoforms")

ggplotly(g, tooltip=c("text", "x", "y"))

IPA vs Distal

g <- df_targets %>%
    mutate(is_nt=target_gene == "non-targeting") %>%
    ggplot(aes(x=pct_ipa, y=pct_distal, color=is_nt, text=target_gene)) +
    geom_point(aes(size=is_nt), 
               pch=16) +
    geom_rug(size=0.1) +
    scale_color_manual(values=c("black", "red")) +
    scale_size_manual(values=c(0.2,0.8)) +
    scale_x_continuous(labels=scales::percent_format(accuracy=1)) +
    scale_y_continuous(labels=scales::percent_format(accuracy=1)) +
    theme_bw() +
    theme(legend.position="none") +
    labs(x="Percent UMIs from IPA isoforms",
         y="Percent UMIs from distal isoforms")

ggplotly(g, tooltip=c("text", "x", "y"))

IPA vs MT

g <- df_targets %>%
    mutate(is_nt=target_gene == "non-targeting") %>%
    ggplot(aes(x=pct_ipa, y=pct_mt, color=is_nt, text=target_gene)) +
    geom_point(aes(size=is_nt), 
               pch=16) +
    geom_rug(size=0.1) +
    scale_color_manual(values=c("black", "red")) +
    scale_size_manual(values=c(0.2,0.8)) +
    scale_x_continuous(labels=scales::percent_format(accuracy=1)) +
    scale_y_continuous(labels=scales::percent_format(accuracy=1)) +
    theme_bw() +
    theme(legend.position="none") +
    labs(x="Percent UMIs from IPA isoforms",
         y="Percent UMIs from chrM")

ggplotly(g, tooltip=c("text", "x", "y"))

Proximal vs MT

g <- df_targets %>%
    mutate(is_nt=target_gene == "non-targeting") %>%
    ggplot(aes(x=pct_proximal, y=pct_mt, color=is_nt, text=target_gene)) +
    geom_point(aes(size=is_nt), 
               pch=16) +
    geom_rug(size=0.1) +
    scale_color_manual(values=c("black", "red")) +
    scale_size_manual(values=c(0.2,0.8)) +
    scale_x_continuous(labels=scales::percent_format(accuracy=1)) +
    scale_y_continuous(labels=scales::percent_format(accuracy=1)) +
    theme_bw() +
    theme(legend.position="none") +
    labs(x="Percent UMIs from Proximal isoforms",
         y="Percent UMIs from chrM")

ggplotly(g, tooltip=c("text", "x", "y"))

Distal vs MT

g <- df_targets %>%
    mutate(is_nt=target_gene == "non-targeting") %>%
    ggplot(aes(x=pct_distal, y=pct_mt, color=is_nt, text=target_gene)) +
    geom_point(aes(size=is_nt), 
               pch=16) +
    geom_rug(size=0.1) +
    scale_color_manual(values=c("black", "red")) +
    scale_size_manual(values=c(0.2,0.8)) +
    scale_x_continuous(labels=scales::percent_format(accuracy=1)) +
    scale_y_continuous(labels=scales::percent_format(accuracy=1)) +
    theme_bw() +
    theme(legend.position="none") +
    labs(x="Percent UMIs from Distal isoforms",
         y="Percent UMIs from chrM")

ggplotly(g, tooltip=c("text", "x", "y"))

Conclusion

The data set appears consistent with being well-processed and coherent. The most interesting observation is the significant perturbation of distal -> proximal isoforms in the knockdowns of the NUDT21, CPSF6, and OGDOF1. It should be noted that OGDOF1 and NUDT21 form a divergent gene pair, raising the possibility that CRISPRi targeting OGDOF1 also impacts NUDT21 expression levels, and thus does not have any significant effect on isoform usage itself. Examining heatmaps from both the KD6 and KD8 experiments shows that in the OGDOF1 perturbations, NUDT21 expression was also reduced to a similar z-score (though slightly higher than a direct NUDT21 perturbation).

Additionally, both the NUDT21 and OGDOF1 perturbations resulted in similar upregulation of CPSF6 levels, however, CPSF6 perturbation showed only upregulation of NUDT21, with no change in OGDOF1 expression.


Runtime Details

Session Info

## R version 4.1.1 (2021-08-10)
## Platform: x86_64-apple-darwin13.4.0 (64-bit)
## Running under: macOS Big Sur 10.16
## 
## Matrix products: default
## BLAS/LAPACK: /Users/mfansler/miniconda3/envs/bioc_3_14/lib/libopenblasp-r0.3.18.dylib
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## attached base packages:
## [1] stats4    stats     graphics  grDevices utils     datasets  methods  
## [8] base     
## 
## other attached packages:
##  [1] SingleCellExperiment_1.16.0 SummarizedExperiment_1.24.0
##  [3] Biobase_2.54.0              GenomicRanges_1.46.0       
##  [5] GenomeInfoDb_1.30.0         IRanges_2.28.0             
##  [7] S4Vectors_0.32.0            BiocGenerics_0.40.0        
##  [9] MatrixGenerics_1.6.0        matrixStats_0.61.0         
## [11] Matrix_1.3-4                ggbeeswarm_0.6.0           
## [13] plotly_4.10.0               cowplot_1.1.1              
## [15] forcats_0.5.1               stringr_1.4.0              
## [17] dplyr_1.0.8                 purrr_0.3.4                
## [19] readr_2.1.1                 tidyr_1.1.4                
## [21] tibble_3.1.7                ggplot2_3.3.5              
## [23] tidyverse_1.3.1             magrittr_2.0.3             
## 
## loaded via a namespace (and not attached):
##  [1] bitops_1.0-7           fs_1.5.2               lubridate_1.8.0       
##  [4] httr_1.4.2             tools_4.1.1            backports_1.4.0       
##  [7] bslib_0.3.1            utf8_1.2.2             R6_2.5.1              
## [10] vipor_0.4.5            DBI_1.1.1              lazyeval_0.2.2        
## [13] colorspace_2.0-2       withr_2.4.3            tidyselect_1.1.1      
## [16] compiler_4.1.1         cli_3.3.0              rvest_1.0.2           
## [19] xml2_1.3.3             isoband_0.2.5          DelayedArray_0.20.0   
## [22] labeling_0.4.2         sass_0.4.0             scales_1.1.1          
## [25] digest_0.6.29          rmarkdown_2.11         XVector_0.34.0        
## [28] pkgconfig_2.0.3        htmltools_0.5.2        highr_0.9             
## [31] dbplyr_2.1.1           fastmap_1.1.0          htmlwidgets_1.5.4     
## [34] rlang_1.0.2            readxl_1.3.1           rstudioapi_0.13       
## [37] farver_2.1.0           jquerylib_0.1.4        generics_0.1.1        
## [40] jsonlite_1.7.2         crosstalk_1.2.0        RCurl_1.98-1.5        
## [43] GenomeInfoDbData_1.2.7 Rcpp_1.0.7             munsell_0.5.0         
## [46] fansi_0.5.0            lifecycle_1.0.1        stringi_1.7.6         
## [49] yaml_2.2.1             MASS_7.3-54            zlibbioc_1.40.0       
## [52] grid_4.1.1             crayon_1.4.2           lattice_0.20-45       
## [55] haven_2.4.3            hms_1.1.1              knitr_1.39            
## [58] pillar_1.7.0           reprex_2.0.1           glue_1.6.2            
## [61] evaluate_0.15          data.table_1.14.2      modelr_0.1.8          
## [64] vctrs_0.4.1            tzdb_0.2.0             cellranger_1.1.0      
## [67] gtable_0.3.0           assertthat_0.2.1       xfun_0.30             
## [70] broom_0.8.0            viridisLite_0.4.0      beeswarm_0.4.0        
## [73] ellipsis_0.3.2

Conda Environment

## Conda Environment YAML
name: bioc_3_14
channels:
  - merv
  - conda-forge
  - bioconda
  - defaults
dependencies:
  - _r-mutex=1.0.1=anacondar_1
  - bioconductor-affy=1.72.0=r41haba8685_1
  - bioconductor-affyio=1.64.0=r41haba8685_1
  - bioconductor-annotate=1.72.0=r41hdfd78af_0
  - bioconductor-annotationdbi=1.56.1=r41hdfd78af_0
  - bioconductor-annotationfilter=1.18.0=r41hdfd78af_0
  - bioconductor-annotationhub=3.2.0=r41hdfd78af_0
  - bioconductor-beachmat=2.10.0=r41h832b226_0
  - bioconductor-biobase=2.54.0=r41h68a2ddb_0
  - bioconductor-biocfilecache=2.2.0=r41hdfd78af_0
  - bioconductor-biocgenerics=0.40.0=r41hdfd78af_0
  - bioconductor-biocio=1.4.0=r41hdfd78af_0
  - bioconductor-biocneighbors=1.12.0=r41h832b226_0
  - bioconductor-biocparallel=1.28.0=r41h832b226_0
  - bioconductor-biocsingular=1.10.0=r41h832b226_0
  - bioconductor-biocversion=3.14.0=r41hdfd78af_0
  - bioconductor-biomart=2.50.0=r41hdfd78af_0
  - bioconductor-biostrings=2.62.0=r41h68a2ddb_0
  - bioconductor-bluster=1.4.0=r41h832b226_0
  - bioconductor-bsgenome=1.62.0=r41hdfd78af_0
  - bioconductor-bsgenome.hsapiens.ucsc.hg19=1.4.3=r41hdfd78af_4
  - bioconductor-bsgenome.hsapiens.ucsc.hg38=1.4.4=r41hdfd78af_0
  - bioconductor-bsgenome.mmusculus.ucsc.mm10=1.4.3=r41hdfd78af_0
  - bioconductor-delayedarray=0.20.0=r41h68a2ddb_0
  - bioconductor-delayedmatrixstats=1.16.0=r41hdfd78af_0
  - bioconductor-deseq2=1.34.0=r41h832b226_0
  - bioconductor-drimseq=1.22.0=r41hdfd78af_0
  - bioconductor-dropletutils=1.14.2=r41h7cba510_0
  - bioconductor-edger=3.36.0=r41h832b226_0
  - bioconductor-ensembldb=2.18.1=r41hdfd78af_0
  - bioconductor-experimenthub=2.2.0=r41hdfd78af_0
  - bioconductor-genefilter=1.76.0=r41hcf7da7f_0
  - bioconductor-geneplotter=1.72.0=r41hdfd78af_0
  - bioconductor-genomeinfodb=1.30.0=r41hdfd78af_0
  - bioconductor-genomeinfodbdata=1.2.7=r41hdfd78af_1
  - bioconductor-genomicalignments=1.30.0=r41h68a2ddb_0
  - bioconductor-genomicfeatures=1.46.1=r41hdfd78af_0
  - bioconductor-genomicranges=1.46.0=r41h68a2ddb_0
  - bioconductor-hdf5array=1.22.1=r41haba8685_0
  - bioconductor-hitc=1.38.0=r41hdfd78af_0
  - bioconductor-interactivedisplaybase=1.32.0=r41hdfd78af_0
  - bioconductor-iranges=2.28.0=r41h68a2ddb_0
  - bioconductor-keggrest=1.34.0=r41hdfd78af_0
  - bioconductor-limma=3.50.0=r41h68a2ddb_0
  - bioconductor-matrixgenerics=1.6.0=r41hdfd78af_0
  - bioconductor-metapod=1.2.0=r41h832b226_0
  - bioconductor-org.hs.eg.db=3.14.0=r41hdfd78af_0
  - bioconductor-org.mm.eg.db=3.14.0=r41hdfd78af_0
  - bioconductor-plyranges=1.14.0=r41hdfd78af_0
  - bioconductor-preprocesscore=1.56.0=r41haba8685_1
  - bioconductor-protgenerics=1.26.0=r41hdfd78af_0
  - bioconductor-rhdf5=2.38.0=r41h0364653_2
  - bioconductor-rhdf5filters=1.6.0=r41h7cba510_1
  - bioconductor-rhdf5lib=1.16.0=r41haba8685_1
  - bioconductor-rhtslib=1.26.0=r41h68a2ddb_0
  - bioconductor-rsamtools=2.10.0=r41h832b226_0
  - bioconductor-rtracklayer=1.54.0=r41hf05625f_2
  - bioconductor-s4vectors=0.32.0=r41h68a2ddb_0
  - bioconductor-scaledmatrix=1.2.0=r41hdfd78af_0
  - bioconductor-scater=1.22.0=r41hdfd78af_0
  - bioconductor-scran=1.22.0=r41h832b226_0
  - bioconductor-scrnaseq=2.8.0=r41hdfd78af_0
  - bioconductor-scuttle=1.4.0=r41h832b226_0
  - bioconductor-singlecellexperiment=1.16.0=r41hdfd78af_0
  - bioconductor-sparsematrixstats=1.6.0=r41h832b226_0
  - bioconductor-summarizedexperiment=1.24.0=r41hdfd78af_0
  - bioconductor-tidysinglecellexperiment=1.4.0=r41hdfd78af_0
  - bioconductor-tricycle=1.2.0=r41hdfd78af_0
  - bioconductor-vsn=3.62.0=r41haba8685_1
  - bioconductor-xvector=0.34.0=r41h68a2ddb_0
  - bioconductor-zlibbioc=1.40.0=r41h68a2ddb_0
  - blas=2.112=openblas
  - blas-devel=3.9.0=12_osx64_openblas
  - bwidget=1.9.14=h694c41f_1
  - bzip2=1.0.8=h0d85af4_4
  - c-ares=1.18.1=h0d85af4_0
  - ca-certificates=2022.6.15=h033912b_0
  - cairo=1.16.0=he01c77b_1009
  - cctools_osx-64=973.0.1=h3e07e27_2
  - clang=12.0.1=h694c41f_4
  - clang-12=12.0.1=default_he082bbe_4
  - clang_osx-64=12.0.1=h633439f_5
  - clangxx=12.0.1=default_he082bbe_4
  - clangxx_osx-64=12.0.1=hdb584c0_5
  - compiler-rt=12.0.1=he01351e_0
  - compiler-rt_osx-64=12.0.1=hd3f61c9_0
  - curl=7.82.0=h9f20792_0
  - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
  - font-ttf-inconsolata=3.000=h77eed37_0
  - font-ttf-source-code-pro=2.038=h77eed37_0
  - font-ttf-ubuntu=0.83=hab24e00_0
  - fontconfig=2.13.1=h10f422b_1005
  - fonts-conda-ecosystem=1=0
  - fonts-conda-forge=1=0
  - freetype=2.10.4=h4cff582_1
  - fribidi=1.0.10=hbcb3906_0
  - gettext=0.19.8.1=hd1a6beb_1008
  - gfortran_impl_osx-64=9.3.0=h9cc0e5e_23
  - gfortran_osx-64=9.3.0=h18f7dce_15
  - gmp=6.2.1=h2e338ed_0
  - graphite2=1.3.13=h2e338ed_1001
  - gsl=2.7=h93259b0_0
  - harfbuzz=3.2.0=h447b35c_0
  - icu=69.1=he49afe7_0
  - isl=0.22.1=hb1e8313_2
  - jbig=2.1=h0d85af4_2003
  - jpeg=9d=hbcb3906_0
  - krb5=1.19.3=hb49756b_0
  - ld64_osx-64=609=h2487922_2
  - ldid=2.1.2=h6a69015_3
  - lerc=3.0=he49afe7_0
  - libblas=3.9.0=12_osx64_openblas
  - libcblas=3.9.0=12_osx64_openblas
  - libclang-cpp12=12.0.1=default_he082bbe_4
  - libcurl=7.82.0=h9f20792_0
  - libcxx=13.0.1=hc203e6f_0
  - libdeflate=1.8=h0d85af4_0
  - libedit=3.1.20191231=h0678c8f_2
  - libev=4.33=haf1e3a3_1
  - libffi=3.4.2=h0d85af4_5
  - libgfortran=5.0.0=9_3_0_h6c81a4c_23
  - libgfortran-devel_osx-64=9.3.0=h6c81a4c_23
  - libgfortran5=9.3.0=h6c81a4c_23
  - libgit2=1.4.3=h514b3f4_0
  - libglib=2.70.2=hf1fb8c0_0
  - libiconv=1.16=haf1e3a3_0
  - liblapack=3.9.0=12_osx64_openblas
  - liblapacke=3.9.0=12_osx64_openblas
  - libllvm12=12.0.1=hd011deb_2
  - libnghttp2=1.47.0=h942079c_0
  - libopenblas=0.3.18=openmp_h3351f45_0
  - libpng=1.6.37=h7cec526_2
  - libssh2=1.10.0=h52ee1ee_2
  - libtiff=4.3.0=hd146c10_2
  - libwebp-base=1.2.1=h0d85af4_0
  - libxcb=1.13=h0d85af4_1004
  - libxml2=2.9.12=h7e28ab6_1
  - libzlib=1.2.11=h9173be1_1013
  - llvm-openmp=12.0.1=hda6cdc1_1
  - llvm-tools=12.0.1=hd011deb_2
  - lz4-c=1.9.3=he49afe7_1
  - make=4.3=h22f3db7_1
  - mpc=1.2.1=hbb51d92_0
  - mpfr=4.1.0=h0f52abe_1
  - ncurses=6.2=h2e338ed_4
  - openblas=0.3.18=openmp_h12da7db_0
  - openssl=1.1.1q=hfe4f2af_0
  - pandoc=2.16.2=h0d85af4_0
  - pango=1.48.10=h056538c_2
  - pcre=8.45=he49afe7_0
  - pcre2=10.37=ha16e1b2_0
  - pixman=0.40.0=hbcb3906_0
  - pthread-stubs=0.4=hc929b4f_1001
  - r-anndata=0.7.5.2=r41hdfd78af_0
  - r-askpass=1.1=r41h28b5c78_2
  - r-assertthat=0.2.1=r41hc72bb7e_2
  - r-backports=1.4.0=r41h28b5c78_0
  - r-base=4.1.1=h2b051ba_2
  - r-base64enc=0.1_3=r41h28b5c78_1004
  - r-bayesfactor=0.9.12_4.4=r41h8619c4b_0
  - r-bayesm=3.1_4=r41he5a6823_2
  - r-bayestestr=0.12.1=r41hc72bb7e_0
  - r-beeswarm=0.4.0=r41h28b5c78_1
  - r-bh=1.75.0_0=r41hc72bb7e_0
  - r-biocmanager=1.30.16=r41hc72bb7e_0
  - r-bit=4.0.4=r41h28b5c78_0
  - r-bit64=4.0.5=r41h28b5c78_0
  - r-bitops=1.0_7=r41h28b5c78_0
  - r-blob=1.2.2=r41hc72bb7e_0
  - r-boot=1.3_28=r41hc72bb7e_0
  - r-brio=1.1.3=r41h28b5c78_0
  - r-broom=0.8.0=r41hc72bb7e_0
  - r-broom.helpers=1.7.0=r41hc72bb7e_0
  - r-bslib=0.3.1=r41hc72bb7e_0
  - r-bwstest=0.2.2=r41h9951f98_1003
  - r-cachem=1.0.6=r41h28b5c78_0
  - r-cairo=1.5_14=r41h28b5c78_0
  - r-callr=3.7.0=r41hc72bb7e_0
  - r-cardata=3.0_5=r41hc72bb7e_0
  - r-caret=6.0_92=r41h0f1d5c4_0
  - r-cellranger=1.1.0=r41hc72bb7e_1003
  - r-checkmate=2.0.0=r41h28b5c78_1
  - r-circular=0.4_93=r41h0661a58_1005
  - r-class=7.3_20=r41h28b5c78_0
  - r-cli=3.3.0=r41h8619c4b_0
  - r-clipr=0.7.1=r41hc72bb7e_0
  - r-cluster=2.1.2=r41h749f5a1_0
  - r-coda=0.19_4=r41hc72bb7e_0
  - r-codetools=0.2_18=r41hc72bb7e_0
  - r-colorspace=2.0_2=r41h28b5c78_0
  - r-colourpicker=1.1.1=r41hc72bb7e_0
  - r-commonmark=1.7=r41h28b5c78_1002
  - r-compositions=2.0_4=r41h28b5c78_0
  - r-contfrac=1.1_12=r41h28b5c78_1002
  - r-correlation=0.8.2=r41hc72bb7e_0
  - r-cowplot=1.1.1=r41hc72bb7e_0
  - r-cpp11=0.4.2=r41hc72bb7e_0
  - r-crayon=1.4.2=r41hc72bb7e_0
  - r-credentials=1.3.2=r41hc72bb7e_0
  - r-crosstalk=1.2.0=r41hc72bb7e_0
  - r-curl=4.3.2=r41h28b5c78_0
  - r-data.table=1.14.2=r41ha76789d_0
  - r-datawizard=0.5.0=r41hc72bb7e_0
  - r-dbi=1.1.1=r41hc72bb7e_0
  - r-dbplyr=2.1.1=r41hc72bb7e_0
  - r-deoptimr=1.0_11=r41hc72bb7e_0
  - r-desc=1.4.0=r41hc72bb7e_0
  - r-desolve=1.33=r41hf83fd76_0
  - r-dichromat=2.0_0.1=r41ha770c72_0
  - r-diffobj=0.3.5=r41h28b5c78_0
  - r-digest=0.6.29=r41h9951f98_0
  - r-dplyr=1.0.8=r41hc4bb905_0
  - r-dqrng=0.3.0=r41h9951f98_0
  - r-dt=0.20=r41hc72bb7e_0
  - r-dtplyr=1.2.0=r41hc72bb7e_0
  - r-e1071=1.7_11=r41h8619c4b_0
  - r-effectsize=0.7.0.5=r41hc72bb7e_0
  - r-ellipsis=0.3.2=r41h28b5c78_0
  - r-elliptic=1.4_0=r41hc72bb7e_2
  - r-evaluate=0.15=r41hc72bb7e_0
  - r-fansi=0.5.0=r41h28b5c78_0
  - r-farver=2.1.0=r41h9951f98_0
  - r-fastmap=1.1.0=r41h9951f98_0
  - r-filelock=1.0.2=r41h28b5c78_1002
  - r-fontawesome=0.2.2=r41hc72bb7e_0
  - r-forcats=0.5.1=r41hc72bb7e_0
  - r-foreach=1.5.2=r41hc72bb7e_0
  - r-formatr=1.11=r41hc72bb7e_0
  - r-fs=1.5.2=r41hc4bb905_1
  - r-furrr=0.2.3=r41hc72bb7e_0
  - r-futile.logger=1.4.3=r41hc72bb7e_1003
  - r-futile.options=1.0.1=r41hc72bb7e_1002
  - r-future=1.25.0=r41hc72bb7e_0
  - r-future.apply=1.9.0=r41hc72bb7e_0
  - r-gameofthrones=1.0.2=r41hc72bb7e_1
  - r-gargle=1.2.0=r41hc72bb7e_0
  - r-generics=0.1.1=r41hc72bb7e_0
  - r-gert=1.5.0=r41ha1c6f2d_1
  - r-ggbeeswarm=0.6.0=r41ha770c72_1003
  - r-ggcorrplot=0.1.3=r41hc72bb7e_2
  - r-ggextra=0.10.0=r41hc72bb7e_0
  - r-ggplot2=3.3.5=r41hc72bb7e_0
  - r-ggrastr=1.0.1=r41hc72bb7e_0
  - r-ggrepel=0.9.1=r41h9951f98_0
  - r-ggridges=0.5.3=r41hc72bb7e_0
  - r-ggsignif=0.6.3=r41hc72bb7e_0
  - r-ggstatsplot=0.9.4=r41hc72bb7e_0
  - r-ggtern=3.3.5=r41hc72bb7e_0
  - r-ggthemes=4.2.4=r41hc72bb7e_0
  - r-gh=1.3.0=r41hc72bb7e_0
  - r-gitcreds=0.1.1=r41hc72bb7e_0
  - r-globals=0.14.0=r41hc72bb7e_0
  - r-glue=1.6.2=r41h0f1d5c4_0
  - r-gmp=0.6_6=r41h64890a7_0
  - r-googledrive=2.0.0=r41hc72bb7e_0
  - r-googlesheets4=1.0.0=r41h785f33e_0
  - r-gower=1.0.0=r41h28b5c78_0
  - r-gridextra=2.3=r41hc72bb7e_1003
  - r-gt=0.5.0=r41hc72bb7e_0
  - r-gtable=0.3.0=r41hc72bb7e_3
  - r-gtools=3.9.3=r41h67d6963_0
  - r-gtsummary=1.6.0=r41hc72bb7e_0
  - r-hardhat=1.0.0=r41hc72bb7e_0
  - r-harrypotter=2.1.1=r41hc72bb7e_1
  - r-haven=2.4.3=r41h8a02945_0
  - r-here=1.0.1=r41hc72bb7e_0
  - r-hexbin=1.28.2=r41h749f5a1_0
  - r-highr=0.9=r41hc72bb7e_0
  - r-hms=1.1.1=r41hc72bb7e_0
  - r-htmltools=0.5.2=r41h9951f98_0
  - r-htmlwidgets=1.5.4=r41hc72bb7e_0
  - r-httpuv=1.6.5=r41h9951f98_0
  - r-httr=1.4.2=r41hc72bb7e_0
  - r-hypergeo=1.2_13=r41hc72bb7e_1002
  - r-ids=1.0.1=r41hc72bb7e_1
  - r-igraph=1.2.9=r41hc81bdb1_0
  - r-ini=0.3.1=r41hc72bb7e_1003
  - r-insight=0.18.2=r41hc72bb7e_0
  - r-ipmisc=6.0.2=r41hc72bb7e_0
  - r-ipred=0.9_13=r41h67d6963_0
  - r-irlba=2.3.5=r41hc2c5f09_0
  - r-isoband=0.2.5=r41h9951f98_0
  - r-iterators=1.0.14=r41hc72bb7e_0
  - r-jcolors=0.0.4=r41hc72bb7e_2
  - r-jquerylib=0.1.4=r41hc72bb7e_0
  - r-jsonlite=1.7.2=r41h28b5c78_0
  - r-kernsmooth=2.23_20=r41he19034d_0
  - r-knitr=1.39=r41hc72bb7e_0
  - r-ksamples=1.2_9=r41h28b5c78_2
  - r-labeling=0.4.2=r41hc72bb7e_0
  - r-labelled=2.9.0=r41hc72bb7e_0
  - r-lambda.r=1.2.4=r41hc72bb7e_1
  - r-later=1.2.0=r41h9951f98_0
  - r-latex2exp=0.9.4=r41hc72bb7e_0
  - r-lattice=0.20_45=r41h28b5c78_0
  - r-lava=1.6.10=r41hc72bb7e_0
  - r-lazyeval=0.2.2=r41h28b5c78_2
  - r-lifecycle=1.0.1=r41hc72bb7e_0
  - r-listenv=0.8.0=r41hc72bb7e_1
  - r-locfit=1.5_9.4=r41h28b5c78_1
  - r-lubridate=1.8.0=r41h9951f98_0
  - r-magrittr=2.0.3=r41h0f1d5c4_0
  - r-manipulatewidget=0.11.1=r41hc72bb7e_0
  - r-mapproj=1.2.8=r41h28b5c78_0
  - r-maps=3.4.0=r41h28b5c78_0
  - r-markdown=1.1=r41h28b5c78_1
  - r-mass=7.3_54=r41h28b5c78_0
  - r-matrix=1.3_4=r41hc2c5f09_0
  - r-matrixmodels=0.5_0=r41hc72bb7e_0
  - r-matrixstats=0.61.0=r41h28b5c78_0
  - r-mc2d=0.1_21=r41hc72bb7e_0
  - r-memoise=2.0.1=r41hc72bb7e_0
  - r-mervdown=0.1.1=r41_0
  - r-metbrewer=0.2.0=r41hc72bb7e_0
  - r-mgcv=1.8_38=r41hf27e4f0_0
  - r-mime=0.12=r41h28b5c78_0
  - r-miniui=0.1.1.1=r41hc72bb7e_1002
  - r-modelmetrics=1.2.2.2=r41hff6cd7b_1
  - r-modelr=0.1.8=r41hc72bb7e_0
  - r-multcompview=0.1_8=r41hc72bb7e_1
  - r-munsell=0.5.0=r41hc72bb7e_1003
  - r-mvtnorm=1.1_3=r41h749f5a1_0
  - r-nlme=3.1_153=r41h749f5a1_0
  - r-nnet=7.3_17=r41h28b5c78_0
  - r-numderiv=2016.8_1.1=r41hc72bb7e_3
  - r-oompabase=3.2.9=r41hc72bb7e_1
  - r-openssl=2.0.0=r41hc6995ed_0
  - r-pairwisecomparisons=3.2.0=r41hc72bb7e_0
  - r-paletteer=1.4.1=r41hc72bb7e_0
  - r-palr=0.3.0=r41hc72bb7e_0
  - r-pals=1.7=r41hc72bb7e_0
  - r-parallelly=1.31.1=r41hc72bb7e_0
  - r-parameters=0.18.2=r41hc72bb7e_0
  - r-patchwork=1.1.1=r41hc72bb7e_0
  - r-pbapply=1.5_0=r41hc72bb7e_0
  - r-performance=0.9.2=r41hc72bb7e_0
  - r-pheatmap=1.0.12=r41hc72bb7e_2
  - r-pillar=1.7.0=r41hc72bb7e_0
  - r-pkgconfig=2.0.3=r41hc72bb7e_1
  - r-pkgload=1.2.4=r41h9951f98_0
  - r-plogr=0.2.0=r41hc72bb7e_1003
  - r-plotly=4.10.0=r41hc72bb7e_0
  - r-plyr=1.8.7=r41hc4bb905_0
  - r-pmcmrplus=1.9.6=r41h225c1e1_0
  - r-png=0.1_7=r41h28b5c78_1004
  - r-praise=1.0.0=r41hc72bb7e_1004
  - r-prettyunits=1.1.1=r41hc72bb7e_1
  - r-prismatic=1.1.1=r41hc72bb7e_0
  - r-proc=1.18.0=r41h9951f98_0
  - r-processx=3.5.2=r41h28b5c78_0
  - r-prodlim=2019.11.13=r41h9951f98_1
  - r-progress=1.2.2=r41hc72bb7e_2
  - r-progressr=0.10.1=r41hc72bb7e_0
  - r-promises=1.2.0.1=r41h9951f98_0
  - r-proto=1.0.0=r41ha770c72_2003
  - r-proxy=0.4_26=r41h28b5c78_0
  - r-ps=1.6.0=r41h28b5c78_0
  - r-purrr=0.3.4=r41h28b5c78_1
  - r-r.methodss3=1.8.1=r41hc72bb7e_0
  - r-r.oo=1.24.0=r41hc72bb7e_0
  - r-r.utils=2.11.0=r41hc72bb7e_0
  - r-r6=2.5.1=r41hc72bb7e_0
  - r-ragg=1.2.1=r41hfdf247a_0
  - r-rappdirs=0.3.3=r41h28b5c78_0
  - r-rcolorbrewer=1.1_2=r41h785f33e_1003
  - r-rcpp=1.0.7=r41h9951f98_0
  - r-rcpparmadillo=0.10.8.1.0=r41h7190c71_0
  - r-rcppeigen=0.3.3.9.2=r41hde7ee74_0
  - r-rcpphnsw=0.3.0=r41h9951f98_0
  - r-rcpptoml=0.1.7=r41h9951f98_1
  - r-rcurl=1.98_1.5=r41h28b5c78_0
  - r-readr=2.1.1=r41h9951f98_0
  - r-readxl=1.3.1=r41h8a02945_4
  - r-recipes=0.2.0=r41hc72bb7e_0
  - r-rematch=1.0.1=r41hc72bb7e_1003
  - r-rematch2=2.1.2=r41hc72bb7e_1
  - r-remotes=2.4.2=r41hc72bb7e_0
  - r-reprex=2.0.1=r41hc72bb7e_0
  - r-reshape=0.8.9=r41hbe3e9c8_0
  - r-reshape2=1.4.4=r41h9951f98_1
  - r-restfulr=0.0.13=r41h9e43be8_1
  - r-reticulate=1.25=r41h8619c4b_1
  - r-rgl=0.109.6=r41h34b6b12_0
  - r-rjson=0.2.20=r41h9951f98_1002
  - r-rlang=1.0.2=r41hc4bb905_0
  - r-rmarkdown=2.11=r41hc72bb7e_0
  - r-rmpfr=0.8_9=r41hdc58f20_0
  - r-robustbase=0.95_0=r41h6f100c1_0
  - r-rpart=4.1.16=r41h28b5c78_0
  - r-rprojroot=2.0.2=r41hc72bb7e_0
  - r-rsqlite=2.2.8=r41h9951f98_0
  - r-rstudioapi=0.13=r41hc72bb7e_0
  - r-rsvd=1.0.5=r41hc72bb7e_0
  - r-rtsne=0.15=r41he059e9c_3
  - r-rvest=1.0.2=r41hc72bb7e_0
  - r-sass=0.4.0=r41h9951f98_0
  - r-scales=1.1.1=r41hc72bb7e_0
  - r-scattermore=0.7=r41h28b5c78_0
  - r-scico=1.3.0=r41hc72bb7e_0
  - r-scutrboot=0.2.2=r41_0
  - r-selectr=0.4_2=r41hc72bb7e_1
  - r-shiny=1.7.1=r41h785f33e_0
  - r-shinyjs=2.1.0=r41hc72bb7e_0
  - r-sitmo=2.0.2=r41h9951f98_0
  - r-snow=0.4_4=r41hc72bb7e_0
  - r-sourcetools=0.1.7=r41h9951f98_1002
  - r-squarem=2021.1=r41hc72bb7e_0
  - r-statmod=1.4.36=r41h0661a58_0
  - r-statsexpressions=1.3.3=r41hc72bb7e_0
  - r-stringi=1.7.6=r41h99ba7f4_1
  - r-stringr=1.4.0=r41hc72bb7e_2
  - r-suppdists=1.1_9.7=r41hc4bb905_0
  - r-survival=3.2_13=r41h28b5c78_0
  - r-sys=3.4=r41h28b5c78_0
  - r-systemfonts=1.0.3=r41h6824f6f_0
  - r-tensora=0.36.2=r41h28b5c78_0
  - r-testthat=3.1.1=r41h9951f98_0
  - r-textshaping=0.3.6=r41hd6221ab_0
  - r-tibble=3.1.7=r41h67d6963_0
  - r-tidyr=1.1.4=r41h9951f98_0
  - r-tidyselect=1.1.1=r41hbe3e9c8_0
  - r-tidyverse=1.3.1=r41hc72bb7e_0
  - r-timedate=3043.102=r41hc72bb7e_1002
  - r-tinytex=0.35=r41hc72bb7e_0
  - r-tzdb=0.2.0=r41h9951f98_0
  - r-usethis=2.1.5=r41hc72bb7e_0
  - r-utf8=1.2.2=r41h28b5c78_0
  - r-uuid=1.0_3=r41h28b5c78_0
  - r-vctrs=0.4.1=r41hc4bb905_0
  - r-vipor=0.4.5=r41hc72bb7e_1003
  - r-viridis=0.6.2=r41hc72bb7e_0
  - r-viridislite=0.4.0=r41hc72bb7e_0
  - r-vroom=1.5.7=r41h9951f98_0
  - r-waldo=0.3.1=r41hc72bb7e_0
  - r-webshot=0.5.3=r41hc72bb7e_0
  - r-whisker=0.4=r41hc72bb7e_1
  - r-withr=2.4.3=r41hc72bb7e_0
  - r-writexl=1.4.0=r41h28b5c78_0
  - r-wrs2=1.1_4=r41hbe3e9c8_0
  - r-xfun=0.30=r41hc4bb905_0
  - r-xml=3.99_0.8=r41h28b5c78_0
  - r-xml2=1.3.3=r41h9951f98_0
  - r-xtable=1.8_4=r41hc72bb7e_3
  - r-yaml=2.2.1=r41h28b5c78_1
  - r-zeallot=0.1.0=r41hc72bb7e_1003
  - r-zip=2.2.0=r41h28b5c78_0
  - readline=8.1=h05e3726_0
  - tapi=1100.0.11=h9ce4665_0
  - tk=8.6.11=h5dbffcc_1
  - tktable=2.10=h49f0cf7_3
  - xorg-kbproto=1.0.7=h35c211d_1002
  - xorg-libice=1.0.10=h0d85af4_0
  - xorg-libsm=1.2.3=h0d85af4_1000
  - xorg-libx11=1.7.2=h0d85af4_0
  - xorg-libxau=1.0.9=h35c211d_0
  - xorg-libxdmcp=1.1.3=h35c211d_0
  - xorg-libxt=1.2.1=h0d85af4_2
  - xorg-xproto=7.0.31=h35c211d_1007
  - xz=5.2.5=haf1e3a3_1
  - zlib=1.2.11=h9173be1_1013
  - zstd=1.5.0=h582d3a0_0
prefix: /Users/mfansler/miniconda3/envs/bioc_3_14